/**
 * 格式化时间戳为时间字符串
 * @param {number} timestamp - 时间戳
 * @returns {string} 格式化的时间字符串 (HH:mm)
 */
export function formatTime(date) {
    if (!date) return '';
    
    // Convert array format time to Date object
    if (Array.isArray(date)) {
        return formatTime(convertArrayToDate(date));
    }
    
    const now = new Date();
    const target = new Date(date);
    const diff = now - target;
    
    // 小于1分钟
    if (diff < 60000) {
        return '刚刚';
    }
    
    // 小于1小时
    if (diff < 3600000) {
        return `${Math.floor(diff / 60000)}分钟前`;
    }
    
    // 小于24小时
    if (diff < 86400000) {
        return `${Math.floor(diff / 3600000)}小时前`;
    }
    
    // 小于30天
    if (diff < 2592000000) {
        return `${Math.floor(diff / 86400000)}天前`;
    }
    
    // 大于30天，显示具体日期
    const year = target.getFullYear();
    const month = String(target.getMonth() + 1).padStart(2, '0');
    const day = String(target.getDate()).padStart(2, '0');
    const hour = String(target.getHours()).padStart(2, '0');
    const minute = String(target.getMinutes()).padStart(2, '0');
    
    return `${year}-${month}-${day} ${hour}:${minute}`;
}

/**
 * 将数组时间格式 [year, month, day, hour, minute, second] 转换为Date对象
 * @param {Array} timeArray - 时间数组 [year, month, day, hour, minute, second]
 * @returns {Date} Date对象
 */
export function convertArrayToDate(timeArray) {
    if (!Array.isArray(timeArray) || timeArray.length < 6) {
        return new Date();
    }
    
    // 注意：月份从0开始，所以需要减1
    const [year, month, day, hour, minute, second] = timeArray;
    return new Date(year, month - 1, day, hour, minute, second);
}

/**
 * 将数组时间格式转换为格式化的日期时间字符串
 * @param {Array} timeArray - 时间数组 [year, month, day, hour, minute, second]
 * @returns {string} 格式化的日期时间字符串 (YYYY-MM-DD HH:mm:ss)
 */
export function formatArrayDateTime(timeArray) {
    if (!Array.isArray(timeArray) || timeArray.length < 6) {
        return '';
    }
    
    const date = convertArrayToDate(timeArray);
    return formatDateTime(date);
}

/**
 * 格式化时间戳为日期时间字符串
 * @param {number} timestamp - 时间戳
 * @returns {string} 格式化的日期时间字符串 (YYYY-MM-DD HH:mm:ss)
 */
export function formatDateTime(timestamp) {
    if (!timestamp) return '';
    
    // Convert array format time to Date object
    if (Array.isArray(timestamp)) {
        return formatDateTime(convertArrayToDate(timestamp));
    }
    
    const date = new Date(timestamp);
    const year = date.getFullYear();
    const month = (date.getMonth() + 1).toString().padStart(2, '0');
    const day = date.getDate().toString().padStart(2, '0');
    const hours = date.getHours().toString().padStart(2, '0');
    const minutes = date.getMinutes().toString().padStart(2, '0');
    const seconds = date.getSeconds().toString().padStart(2, '0');
    
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

/**
 * 格式化时间戳为相对时间字符串
 * @param {number} timestamp - 时间戳
 * @returns {string} 相对时间字符串
 */
export function formatRelativeTime(timestamp) {
    if (!timestamp) return '';
    
    const now = Date.now();
    const diff = now - timestamp;
    
    // 小于1分钟
    if (diff < 60 * 1000) {
        return '刚刚';
    }
    
    // 小于1小时
    if (diff < 60 * 60 * 1000) {
        const minutes = Math.floor(diff / (60 * 1000));
        return `${minutes}分钟前`;
    }
    
    // 小于24小时
    if (diff < 24 * 60 * 60 * 1000) {
        const hours = Math.floor(diff / (60 * 60 * 1000));
        return `${hours}小时前`;
    }
    
    // 小于30天
    if (diff < 30 * 24 * 60 * 60 * 1000) {
        const days = Math.floor(diff / (24 * 60 * 60 * 1000));
        return `${days}天前`;
    }
    
    // 大于30天，返回具体日期
    return formatDateTime(timestamp);
}

/**
 * 获取当前时间戳
 * @returns {number} 当前时间戳
 */
export function getCurrentTimestamp() {
    return Date.now();
}

/**
 * 获取今天的开始时间戳
 * @returns {number} 今天开始的时间戳
 */
export function getTodayStartTimestamp() {
    const date = new Date();
    date.setHours(0, 0, 0, 0);
    return date.getTime();
}

/**
 * 获取今天的结束时间戳
 * @returns {number} 今天结束的时间戳
 */
export function getTodayEndTimestamp() {
    const date = new Date();
    date.setHours(23, 59, 59, 999);
    return date.getTime();
}

/**
 * 获取本周的开始时间戳
 * @returns {number} 本周开始的时间戳
 */
export function getWeekStartTimestamp() {
    const date = new Date();
    const day = date.getDay() || 7;
    date.setDate(date.getDate() - day + 1);
    date.setHours(0, 0, 0, 0);
    return date.getTime();
}

/**
 * 获取本周的结束时间戳
 * @returns {number} 本周结束的时间戳
 */
export function getWeekEndTimestamp() {
    const date = new Date();
    const day = date.getDay() || 7;
    date.setDate(date.getDate() + (7 - day));
    date.setHours(23, 59, 59, 999);
    return date.getTime();
}

/**
 * 获取本月的开始时间戳
 * @returns {number} 本月开始的时间戳
 */
export function getMonthStartTimestamp() {
    const date = new Date();
    date.setDate(1);
    date.setHours(0, 0, 0, 0);
    return date.getTime();
}

/**
 * 获取本月的结束时间戳
 * @returns {number} 本月结束的时间戳
 */
export function getMonthEndTimestamp() {
    const date = new Date();
    date.setMonth(date.getMonth() + 1);
    date.setDate(0);
    date.setHours(23, 59, 59, 999);
    return date.getTime();
} 